/* eslint-disable */

// 时间格式化
Date.prototype['Format'] = function (fmt) {
  var o = {
    'M+': this.getMonth() + 1, // 月份
    'd+': this.getDate(), // 日
    'h+': this.getHours(), // 小时
    'm+': this.getMinutes(), // 分
    's+': this.getSeconds(), // 秒
    'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
    'S': this.getMilliseconds()
    // 毫秒
  }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
    }
  }
  return fmt
}
// new Date().Format('yyyy-MM-dd hh:mm:ss')


// base64解码
// export function b64DecodeUnicode (str) {
//   return decodeURIComponent(atob(str).split('').map(function (c) {
//     return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
//   }).join(''))
// }

// 节流  场景: 频繁得调用一个回调函数, 但要的是最后的那一次
// ...args剩余参数语法=>arguments  剩余参数的数组args 可以使用数组方法 arguments不行
// export function debounce (func, delay = 300) {
//   let timer
//   return function (...args) {
//     if (timer) clearTimeout(timer)
//     timer = setTimeout(() => {
//       func.apply(func, args)
//     }, delay)
//   }
// }
export interface debounceInterface {
  (x: any, time: number): any
}

// 数组 substr方法 截取
export function arraySubstr (arr, start, length) {
  let res: any[] = []
  if (arr.length > 0) {
    if (!length || length > arr.length) length = arr.length
    for (let index = start; index < length; index++) {
      res.push(arr[index])
    }
  }
  return res
}

// import Cookies from 'js-cookie';
// import { cookieExpires } from '@/config'; // cookie保存的天数

/**
 * @Author: asheng
 * @msg: 存取token
 * @param {string} token
 */
// export const TOKEN_KEY: string = 'token';
// export const setToken = (token: string) => {
//   Cookies.set(TOKEN_KEY, token, { expires: cookieExpires || 1 });
// };
// export const getToken = () => {
//   const token = Cookies.get(TOKEN_KEY);
//   if (token) {
//     return token;
//   } else {
//     return false;
//   }
// };

/**
 * @param {String} url
 * @description 从URL中解析参数
 */
export const getParams = (url: string) => {
  const keyValueArr = url.split('?')[1].split('&');
  let paramObj: any = {};
  keyValueArr.forEach(item => {
    const keyValue = item.split('=');
    paramObj[keyValue[0]] = keyValue[1];
  });
  return paramObj;
};

/**
 * 判断一个对象是否存在key，如果传入第二个参数key，则是判断这个obj对象是否存在key这个属性
 * 如果没有传入key这个参数，则判断obj对象是否有键值对
 */
export const hasKey = (obj: any, key: string | number) => {
  if (key) {
    return key in obj;
  } else {
    const keysArr = Object.keys(obj);
    return keysArr.length;
  }
};

/**
 * 校验手机号是否正确
 * @param phone 手机号
 */

export const verifyPhone = (phone: string | number) => {
  const reg = /^1[34578][0-9]{9}$/;
  const _phone = phone.toString().trim();
  let toastStr =
    _phone === ''
      ? '手机号不能为空~'
      : !reg.test(_phone) && '请输入正确手机号~';
  return {
    errMsg: toastStr,
    done: !toastStr,
    value: _phone
  };
};

// 时间格式化
/* tslint-disable */
export function Format(fmt: string): string {
  let date: Date = new Date()
  let o: any = {
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'h+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    'S': date.getMilliseconds()
    // 毫秒
  };
  let str: string = '';
  if (/(y+)/.test(fmt)) {
    str = fmt.replace(
      RegExp.$1,
      (date.getFullYear() + '').substr(4 - RegExp.$1.length)
    );
  }
  for (let k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      str = fmt.replace(
        RegExp.$1,
        RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
      );
    }
  }
  return str;
};
// new Date().Format('yyyy-MM-dd hh:mm:ss')

/* eslint-enable */

// 深copy
export function newData(data: any): any {
  return JSON.parse(JSON.stringify(data));
}

// 取出两个数组中的不同元素
export function getDifferent(arr1: any[], arr2: any[]): any[] {
  return arr1.concat(arr2).filter((v, i, arr) => {
    return arr.indexOf(v) === arr.lastIndexOf(v);
  });
}

// 时间转化 1000 => 01:12:01
export function forHoursMin(number: number): string {
  let hours: number = parseInt(number / 3600 + '', 10);
  let minute: number = parseInt((number % 3600) / 60 + '', 10);
  let seconds: number = number % 60;
  // console.log(hours, minute, seconds)
  let str = [hours, minute, seconds].map(formatNumber).join(':');
  return str;
}

export function formatNumber(n: number) {
  const str: string = n.toString();
  return str[1] ? str : `0${str}`;
}

export function formatTime(date: Date) {
  const year = date.getFullYear();
  const month = date.getMonth() + 1;
  const day = date.getDate();

  const hour = date.getHours();
  const minute = date.getMinutes();
  const second = date.getSeconds();

  const t1 = [year, month, day].map(formatNumber).join('/');
  const t2 = [hour, minute, second].map(formatNumber).join(':');

  return `${t1} ${t2}`;
}

// 抽离成公共方法
export async function awaitWrap(promise: Promise<any>) {
  try {
    const data = await promise;
    return [null, data];
  } catch (err) {
    return [err, null];
  }
}
